package com.study.convention.exception;

import com.study.convention.errorCode.IErrorCode;
import lombok.Getter;
import org.springframework.util.StringUtils;

import java.util.Optional;

/**
 * @author canace
 * @version 1.0
 * @description 抽象项目中三类异常体系：客户端异常、服务端异常以及远程服务调用异常
 * @date 2024/1/22 20:03
 */
@Getter
public abstract class AbstractException extends RuntimeException{

    public final String errorCode;

    public final String errorMessage;

    public AbstractException(String message, Throwable throwable, IErrorCode errorCode) {
        super(message, throwable);
        this.errorCode = errorCode.code();
        // Optional主要为了判断空指针异常
        // 该句代码的意思是：如果message不为空，那么就返回message，否则返回null
        this.errorMessage = Optional.ofNullable(StringUtils.hasLength(message) ? message : null).orElse(errorCode.message());
    }
}
